更新时间:2024-04-18 22:26
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。
Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。
(概述图片来源:,内容来源:)
Spring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安全处理。 Spring Security提供有若干个过滤器,它们能够拦截Servlet请求,并将这些请求转给认证和访问决策管理器处理,从而增强安全性。根据自己的需要,可以使用适当的过滤器来保护自己的应用程序。
如果使用过Servlet过滤器且令其正常工作,就必须在Web应用程序的web.xml文件中使用
FilterToBeanProxy是一个特殊的Servlet过滤器,它本身做的工作并不多,而是将自己的工作委托给Spring应用程序上下文 中的一个Bean来完成。被委托的Bean几乎和其他的Servlet过滤器一样,实现javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
实际上,FilterToBeanProxy代理给的那个Bean可以是javax.servlet.Filter的任意实现。这可以是 Spring Security的任何一个过滤器,或者它可以是自己创建的一个过滤器。但是正如本书已经提到的那样,Spring Security要求至少配置四个而且可能一打或者更多的过滤器。
人们使用Spring Security有很多种原因,不过通常吸引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。
特别要指出的是他们不能在WAR 或 EAR 级别进行移植。
这样,如果更换服务器环境,就要,在新的目标环境进行大量的工作,对应用系统进行重新配置安全。
使用Spring Security 解决了这些问题,也提供很多有用的,完全可以指定的其他安全特性。
可能知道,安全包括两个主要操作。
第一个被称为“认证”,是为用户建立一个他所声明的主体。主体一般是指用户,设备或可以在系统中执行动作的其他系统。
第二个叫“授权”,指的是一个用户能否在应用中执行某个操作,在到达授权判断之前,身份的主体已经由身份验证过程建立。
这些概念是通用的,不是Spring Security特有的。
在身份验证层面,Spring Security广泛支持各种身份验证模式,这些验证模型绝大多数都由第三方提供,或者正在开发的有关标准机构提供的,例如 Internet Engineering Task Force.
作为补充,Spring Security 也提供了自己的一套验证功能。
Spring Security 支持认证一体化如下认证技术:
HTTP BASIC authentication headers (一个基于IEFT RFC 的标准)
HTTP Digest authentication headers (一个基于IEFT RFC 的标准)
HTTP X.509 client certificate exchange (一个基于IEFT RFC 的标准)
LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境)
Form-based authentication (提供简单用户接口的需求)
OpenID authentication
Computer Associates Siteminder
JA-SIG Central Authentication Service (CAS,这是一个流行的开源单点登录系统)
Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议)
部署“Tutorial”样例程序
这个样例程序包含在spring发布的zip压缩包文件,名为:spring-security-samples-tutorial-
当运行程序的时候, 确保自己熟悉spring安全的调试日志输出(日志输出默认为打开状态)。虽然框架输出详细的日志,但是很多人却使用得很失败。作为一个未授权的用户点击了一个安全的链接,当登录,退出等等情况下的时候到底发生了什么?当进入到安全过滤器链开始处理的时候,将会看到每一个http请求及如何处理的日志,所以许多在论坛中报道的问题可以按网页浏览器请求的相应日志记录来匹配查找得以解决
在命名空间第一章节的第一部分,绝大部分是关于之前学习过的两个步骤,进入前面使用过指南样例(tutorial sample)命令空间元素并且理解它们的主要目的。如果有修改过Petclinic tutorial或者其它的样例程序,参考向导(Reference Guide)的其它部分将带进入更详细的有关于框架实现类,如果有需要的话,可以浏览下它们。
部署通讯录(Contacts)样例(可选)
这个样例将尝试更多spring安全框架高级属性,尤其是ACL模块。文件spring-security-samples-contacts-
保障应用程序安全
到这个步骤应该对spring的安全如果发觉功效有了很好的领会,剩下的工作应该是如果设计应用程序来实现安全了。推荐使用指南样例(Tutorial Sample)来完成实际的集成工作,即使有复杂的需求。大多数在论坛中报告问题的都是出自配置的问题,因为他们在一开始在并不知道将要如果进行的时候做了太多的改变。
2010年12月22日,Spring Security 3.1.0.M2 发布。
2011年02月12日,Spring Security 3.1.0.RC1 发布,与 M2 版本比较,该版本主要改进内容请看 changelog 。
2011年05月01日,Spring Security 3.1.0.RC2 发布。
2011年12月08日,Spring Security 3.1.0 GA版 发布,改进:
新特性:添加支持bcrypt密码编码,允许使用一个显式定义一个过滤器链RequestMatcher当使用名称空间,允许使用定制AuthenticationManager在< http >和全球方法安全性。
在文档中添加“改进点”章节
AbstractAuthenticationProcessingFilter 接口应当包含AuthenticationFailureHandler 和 AuthenticationSuccessHandler的getter方法
在命名空间文档中删除自动配置
方便在多个服务中创建DefaultSpringSecurityContextSource
认证的管理不能被重写
DelegatingMethodSecurityMetadataSource中包含有过多的(误导性)的日志
提醒用户use-secure-cookie设置为false并不能真正的阻止cookie被标记为安全
在命名空间的解析代码中移除了过时的方法
模型中的ID类型不利于使用Spring 3.1的概要文件。
改进命名空间的文档。
2014年8月19日,Spring Security 4.0.0.M2 发布。
主要改进内容:
Support nested static groups in LDAP Authentication
Lots of integration tests added to the sample applications
Updated minimum version of Spring 4.1 RC2. This was necessary for enough of the features, that it made sense to do across the board
更多内容请看发行日志。